﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Npgsql;
using System.Data;
using System.Windows.Forms;

namespace Gerencial_Fisio_Nutry.Banco
{
    //Classe responsavel por trabalhar DIRETAMENTE com o banco

    public class Banco
    {
           
        string conexao;
        //-------------------------------------
        //novos metodos
        //-------------------------------------
        public Banco()
        {
            conexao = Variaveis.Variaveis.conexao;
        }
        private NpgsqlConnection Conectar()
        {
            return new NpgsqlConnection(conexao);
        }

        #region  metodos capazes de executar UPDATE, INSERT e DELETE  com ou sem retorno de algum campo da tabela
        public void executaQuerySemRetorno(string query)
        {
            try
            {
                new NpgsqlDataAdapter(query, Conectar()).Fill(new DataTable());
            }
            catch (Exception e){
             MessageBox.Show("A Classe Banco.Pessoa \nMetodo ExecutaQuerySemRetorno \nQuery :\n"
                 +query+" \nExecutou a mensagem : "+  e.Message);

            }
        }
        public string executaQueryRetorno(string query, string retorno)
        {
            query += (" returning " + retorno);
            try
            {
                DataTable dtt = new DataTable();
                new NpgsqlDataAdapter(query, Conectar()).Fill(dtt);
                return dtt.Rows[0].ItemArray.GetValue(0).ToString();//dessa forma vai retornar sempre uma coisa q devera ser tratada pelo metodo acima

            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.Pessoa \nMetodo ExecutaQueryRetorno \nQuery :\n"
                    + query + " \nExecutou a mensagem : " + e.Message);
                return null;
            }
        }
        #endregion \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
      
        /// <summary>
        /// Linha de Query deve[ COMEÇAR COM SELECT ]
        /// [NAO DEVE EXECUTAR (UPDATE, INSERT, DELETE)]
        /// </summary>
        /// <param name="query"> linha de conexao que deve começar com SELECT</param>
        /// <returns>retorna uma Tabela da Dados [DATATABLE] caso a consulta realize com sucesso</returns>
        public DataTable executaQueryRetornaDataTable(string query)
        {   
            if (query.Split(' ')[0].ToUpper().Equals("SELECT"))
                try
                {
                    DataTable dtt = new DataTable();
                    new NpgsqlDataAdapter(query, Conectar()).Fill(dtt);
                    return dtt;
                }
                catch (Exception e)
                {
                    MessageBox.Show("A Classe Banco.Banco \nMetodo ExecutaQueryRetornaDatatable \nQuery :\n"
                        + query + " \nExecutou a mensagem : " + e.Message);
                    return new DataTable();
                }
            else
            {
                MessageBox.Show("A Classe Banco.Banco \nMetodo ExecutaQueryRetornaDatatable \nQuery :\n"
                      + query + " \nExecutou a mensagem : Este metodo permite apenas a entrada de Select");
                return new DataTable() ;
            }
        }
    }
}
